package com.reportes;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRResultSetDataSource;

import com.Reporte;
import com.util.Util;

import exceptions.InvalidArgumentException;

public class Caserio extends Reporte {
	private static final String ID_ESTADO = "estado";
	private static final String ID_MUNICIPIO = "municipio";
	private static final String ID_PARROQUIA = "parroquia";

	private String criterioSQL = " WHERE TRUE";

	@Override
	public void VerificarParametros(HttpServletRequest request)
			throws InvalidArgumentException {
		Integer id =  Util.toInteger(request.getParameter(ID_PARROQUIA));
		if (id != null){
			criterioSQL += " AND parroquia.id= "+ id;
			return;
		}
		id = Util.toInteger(request.getParameter(ID_MUNICIPIO));
		if (id != null){
			criterioSQL += " AND municipio.id= "+ id;
			return;
		}
		id = Util.toInteger(request.getParameter(ID_ESTADO));
		if (id != null){
			criterioSQL += " AND estado.id= "+ id;
			return;
		}
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		Caserio reporte = new Caserio();
		copyAttributesTo(reporte);
		return reporte;
	}

	@Override
	protected JRDataSource executeQuery(Connection connection)
			throws SQLException {
		StringBuffer sql =
			new StringBuffer("SELECT")
					.append(" Estado.codigo as ecodigo,")
					.append(" Estado.nombre as enombre,")
					.append(" Municipio.codigo as mcodigo,")
					.append(" Municipio.nombre as mnombre,")
					.append(" Parroquia.codigo as pcodigo,")
					.append(" Parroquia.nombre as pnombre,")
					.append(" Caserio.codigo as ccodigo,")
					.append(" Caserio.nombre as cnombre,")
					.append(" Caserio.poblacion as cpoblacion,")
					.append(" Microcuenca.nombre as minombre")
					.append(" FROM")
					.append(" Estado")
					.append(" INNER JOIN Municipio ON (Estado.id = municipio.estado_id)")
					.append(" INNER JOIN Parroquia ON (Municipio.id = Parroquia.municipio_id)")
					.append(" INNER JOIN Caserio ON (Parroquia.id = caserio.parroquia_id)")
					.append(" INNER JOIN Microcuenca on (Caserio.microcuenca_id = Microcuenca.id)")
					.append(criterioSQL)
					.append(" ORDER BY Estado.nombre,Municipio.nombre,Parroquia.nombre,Caserio.nombre");
		Statement statement = connection.createStatement();
		ResultSet rs = statement.executeQuery(sql.toString());
		return new JRResultSetDataSource(rs);
	}

}
